IAMユーザーにAssumeRoleの権限が無くてもスイッチロールできる(ように見える)のはなぜですか?
困っていた内容
スイッチロールの信頼関係設定における AssumeRole権限について質問します。 自アカウントのIAMユーザーに、自アカウントのIAMロールにスイッチできるよう設定を行っています。
ロールの信頼関係を次のようにアカウント( root = アカウント自体 の意味になります)で指定した場合、ユーザーに「sts:AssumeRole」のアクセス権限が必要だと認識しています。
arn:aws:iam::XXXXXXXXXXXX:root
一方で、ロールの信頼関係を次のようにユーザー名で指定すると、ユーザーに「sts:AssumeRole」のアクセス権限が無くてもスイッチロールできてしまいます。
arn:aws:iam::XXXXXXXXXXXX:user/username
このような振る舞いの違いが起きるのはどうしてでしょうか? ユーザー名で指定する方法でスイッチロールする場合、ユーザーに「AssumeRole」の権限が無くてもスイッチロールできるのはなぜでしょうか?
どう対応すればいいの?
[1]のドキュメントを確認してみます。
アカウントで指定する方法については、このように記述されています。
これを行うには、信頼するアカウントの管理者が、ロールの信頼ポリシーで Principal として信頼されるアカウント番号を指定します。これにより、信頼されたアカウント内のすべてのユーザーがロールを引き受けることができるようになる可能性があります。設定を完了するには、信頼されたアカウントの管理者がそのアカウント内の特定のグループまたはユーザーにロールを切り替えるアクセス権限を付与する必要があります。
→ 設定を完了するには、アクセス権限を付与する必要がある、と記述されています。
上記のアクセス権限(ポリシー)が無い状態でスイッチロールすると、スイッチロールはエラーになります。
エラーメッセージ:1 つ以上のフィールドに無効な情報があります。情報を確認するか、管理者に連絡してください。
上記のアクセス権限(ポリシー)を付与すれば、スイッチロールできるようになります。
ユーザー名で指定する方法については、特に記述が見当たらないのですが、アクセス権限(ポリシー)を付与することなく設定を完了します。
スイッチロールを行うと、スイッチロールは成功します。
ユーザー名で指定する方法でスイッチロールする場合は、IAMユーザーに「AssumeRole」の権限が無くてもスイッチロールできるのはなぜですか?
「ユーザーにロールを切り替えるアクセス権限(sts:AssumeRole)」が不要となる訳ではありません。
マネジメントコンソール上で、該当のIAMロールの「信頼関係」タブを見てみましょう。
「信頼関係の編集」ボタンをクリックして、「信頼関係の編集」を表示すると、
下記画面のように、ポリシードキュメントの編集画面となります。
この中で
"Action": "sts:AssumeRole"
が指定されています。
つまり、ユーザー名で指定する方法の場合、「信頼関係」における設定により 「ユーザーにロールを切り替えるアクセス権限(sts:AssumeRole)」が許可されています。
アカウントで指定する方法の場合も同様に 「信頼関係」での設定がありますが、それだけでは不十分です。 これに加えて、ロールを切り替えるアクセス権限(ポリシー)を付与する必要があります。
設定を完了するには、信頼されたアカウントの管理者がそのアカウント内の特定のグループまたはユーザーにロールを切り替えるアクセス権限を付与する必要があります。
スイッチロールのアクセス権限の設定方法をまとめますと、以下のようになります。
スイッチロールのアクセス権限の設定方法
ロールの信頼関係でのPrincipalの指定方法 | 設定内容 |
---|---|
アカウントを指定 | ロールの信頼関係とユーザーのポリシーの両方で設定 |
ユーザー名を指定 | ロールの信頼関係で設定 |
参考資料
[1] ロールを切り替えるユーザーアクセス許可の付与 - AWS Identity and Access Management